using System;
using AntEater.ComponentModel.Validation;
using System.ComponentModel;

namespace AntEater.ComponentModel.BuildElements
{

    /// <summary>
    /// Provides an Interface for Build Elements
    /// </summary>
    public interface IBuildElement : IValidatable, INotifyPropertyChanged, ICloneable
    {
        /// <summary>
        /// Gets the parent.
        /// </summary>
        /// <value>The parent.</value>
        IBuildElement Parent {
            get;
            set;
        }

        /// <summary>
        /// Gets the root.
        /// </summary>
        /// <value>The root.</value>
        IRootBuildElement Root {
            get;
        }

        /// <summary>
        /// Gets a value indicating whether this build element is imported from an external buildfile.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this build element is imported; otherwise, <c>false</c>.
        /// </value>
        bool IsImported {
            get;
        }

        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <value>The context.</value>
        BuildFileDefinition Context {
            get;
        }
    }
}
